|

''Hello World''de Güvenlik Açığı
Savaş Köse'nin bir yazısından
Cracker’ımız “Hello World” programını çalıştırıyor ve sadece kendi ismini girip Enter tuşuna basmak yerine giriş yapmaya devam ediyor ve 50 karakter dolduktan sonra ise artık çok ince bir şekilde hesaplanmış sistem kodlarını girmeye başlıyor. Çünkü Enter’a bastığında ekrana “Hello” yazısının yazılmayacağını, kendisinin girdiği sistem kodlarının çalışacağını çok iyi biliyor cracker’ımız.
Bu başlığı okuduğunuzda, ne kadar saçma olduğunu düşünebilirsiniz. Haklısınız. “Hello World” gibi ekrana sadece “Merhaba Dünya” yazan bir programda ne gibi bir güvenlik açığı olabilir ki? Hem kaldı ki olsa kime ne zararı olur? Gelin hep birlikte bakalım neler oluyor;
İnternet güvenliğini, daha doğrusu İnternet güvensizliğini, daha iyi anlayabilmek için işin en temeline inelim ve inceleyelim.
Amatör ya da profesyonel tüm programcıların programlamada öğrendikleri ilk programdır “Hello World”. Bu programı yazarken ilk aşama ekrana sadece “Hello World” yazmaktır. Programcı adayımız ilk dersine başlıyor,
printf(“Hello World”);
Buraya kadar her şey yolunda, ancak bunu öğrenen programcımız artik daha fazlasını istiyor ve bir de ekrandan kullanıcının ismini okumak istiyor ve gerekli değişken tanımını ve okuma işlemini de ekliyor programa.
char isim[50]; // kullanıcı ismini saklayacak değişkeni tanımla
scanf(“%s”,isim); // kullanıcı ismini ekrandan oku
printf(“Hello %s”,isim);
İşte bu noktada başlıyor her şey! Programcımız belki de ileride sistemlerin güvenliğini tamamen riske atacak programlama hataları dizisine daha ilk programından başlıyor! Hiç bir şeyden habersiz olarak.
Programcı adayımız düşünüyor “Acaba kullanıcı ismini saklamak için ne kadarlık bir dizi açsam?”. Şöyle bir tarttıktan sonra aklında olayı “Dünyada acaba 50 karakterden uzun bir isim var mıdır?” diye düşünerek 50 karakter uzunlugunda bir dizi yeter diyor.
Sonra derleyip çalıştırıyor programı, kendi ismini giriyor ve ekranda Hello yazisini da gördükten sonra “mükemmel çalışıyor program” diyor kendi kendine ve ilk programlama deneyimini başarıyla bitirmenin verdiği hazla ayrılıyor bilgisayarının başından.
Evet tek kelimeyle “mükemmel bir program” programcı açısından. Ancak bir cracker açısından ise “çok daha mükemmel bir program” aslında!!!
Sistemde hiç bir yetkiye sahip olmayan normal bir cracker, sadece programcı adayımızın geliştirdiği bu programın exe’sini çalıştırarak tüm sistemi ele geçirebilir! Nasıl mı?
Cracker’ımız “Hello World” programını çalıştırıyor ve sadece kendi ismini girip Enter tuşuna basmak yerine giriş yapmaya devam ediyor ve 50 karakter dolduktan sonra ise artık çok ince bir şekilde hesaplanmış sistem kodlarını girmeye başlıyor. Çünkü Enter’a bastığında ekrana “Hello” yazısının yazılmayacağını, kendisinin girdiği sistem kodlarının çalışacağını çok iyi biliyor cracker’ımız. Artık tüm sistem cracker’ın emrindedir!
Peki programcı adayımızın daha ilk deneyimi olan bu “Hello World” programında olan sorun nedir?
Evet güvenlik konusunu iyi bilenler daha baştan fark etmişlerdir, bunun bir “buffer overflow” (yığın taşması) açığı olduğunu. Kısaca açıklamak gerekirse, belli bir amaç için ayarladığınız belleğin yeterli olmaması ve sınırlarının ötesine taşmasıdır.
Örnek programımızda eğer kullanıcı 50 karakterden uzun bir isim girerse, 50. karakterden sonra girilen karakterler artık isim dizisinde yer kalmadığı için direk olarak programın kod kısmının üzerine yazılacaktır ve bir sonraki adımda da çalıştırılacaklardır.
Aslında “buffer overflow” açığı günümüzde çok büyük bir tehdit olmaya devam etmektedir. Çok değişik şekillerde ve sistemlerde bu tür açıklar her zaman için olabilmektedir.
Peki nasıl oluyor da bu kadar önemli bir konuya programlama kitaplarında hiç bir şekilde değinilmiyor? Daha da kötüsü okullarda neden programlama derslerinde sadece programlama öğretiliyor da “güvenli programlama“ öğretilmiyor?
Tamam kitaplarda (mesela bir C kitabında), C’nin dizin kontrolü yapmadığı, onun için dizin işlemlerinde indis kontrollerine dikkat edilmesi gerektiği anlatılıyor ama yeni başlayan bir programcı adayı için ne ifade eder ki bu açıklama, güvenlik yönünden?
Bakın güvenlik problemi öyle binlerce dolara mal olan, profesyonel kişilerce yazılmış, nasıl yazıldığını bir yana bırakın nasıl çalıştığı bile zor anlaşılan komplex yazılımlarla tamamen çözülemez. Tüm programcıların ilk programı olan “Hello World” programından başlayarak, güvenlik konusunda bilgilendirilmeleri gerektiğini düşünüyorum.
|